/**
 * Captain
 * © 2017 Captain copyright，All rights reserved.
 * http://www.sccaptain.com.cn
 * 
 * JAVA : 8
 * 文  件  名: EntityDao.java
 * 创  建  人: Roc Zheng (roc.djz@gmail.com)
 * 创建时间: 2017年6月21日 下午7:12:12
 * 版         本: 1.0.0
 * 备         注:
 * 修订历史:
 */
package com.material.c2c.core.dao;

import java.io.Serializable;
import java.util.List;

/**
 * 
 * 
 * @since 1.0
 * @version 1.0
 * @author Roc Zheng (roc.djz@gmail.com)
 */
public interface EntityDao<T, ID extends Serializable> {
  /**
   * 
   * @param entity
   * @return
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  <S extends T> S add(S entity);

  /**
   * 
   * @param entity
   * @return
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  <S extends T> S update(S entity);

  /**
   * 
   * @param id
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  void delete(ID id);

  /**
   * 
   * @param entity
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  void delete(T entity);

  /**
   * 
   * @param id
   * @return
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  T getOne(ID id);

  /**
   * 
   * @return
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  List<T> listAll();

  /**
   * 
   * @return
   *
   * @since 1.0
   * @version 1.0
   * @author Roc Zheng (roc.djz@gmail.com)
   */
  long count();
}
